﻿/// <reference path="J.js" />
j.overLayer = new j.Class().extend({
    option: {
        Lay: null, //覆盖层对象或ID
        color: "#fff", //背景色
        Opacity: 50, //透明度(0-100)
        zIndex: 1000//层叠顺序
    }, //全局默认值。
    initialize: function(options) {
        this.SetOption(options);
        var body = document.body || document.documentElement;
        this.Lay = j.$(this.option.Lay) || body.insertBefore(document.createElement("div"), body.childNodes[0]);
        this.Opacity = parseInt(this.option.Opacity);
        this.zIndex = parseInt(this.option.zIndex);
        with (this.Lay.style) { display = "none"; zIndex = this.zIndex; left = top = 0; position = "fixed"; width = height = "100%"; }
        if (j.Browser.isIE6) {
            this.Lay.style.position = "absolute";
            //ie6设置覆盖层大小程序
            this._resize = j.bind(this, function() {
                this.Lay.style.width = Math.max(document.documentElement.scrollWidth, document.documentElement.clientWidth) + "px";
                this.Lay.style.height = Math.max(document.documentElement.scrollHeight, document.documentElement.clientHeight) + "px";
            });
            //遮盖select
            this.Lay.innerHTML = '<iframe style="position:absolute;top:0;left:0;width:100%;height:100%;filter:alpha(opacity=0);"></iframe>'
        }
    },
    show: function() {//显示
        if (j.Browser.isIE6) { this._resize(); window.attachEvent("onresize", this._resize); } //兼容ie6
        with (this.Lay.style) { //设置样式
            //设置透明度
            j.Browser.isIE ? filter = "alpha(opacity:" + this.Opacity + ")" : opacity = this.Opacity / 100;
            backgroundColor = this.option.color; display = "block";
        }
    },
    hide: function() {//关闭
        this.Lay.style.display = "none";
        if (j.Browser.isIE6) { window.detachEvent("onresize", this._resize); }
    }
});
j.layer = new j.Class().extend({
    option: {
        Over: true, //是否显示覆盖层
        Fixed: false, //是否固定定位
        Center: false, //是否居中
        onShow: function() { } //显示时执行
    },
    initialize: function(layer, options) {
        this.Box = j.$(layer); //显示层

        this.OverLay = new j.overLayer(options); //覆盖层
        this.SetOption(options);
        this.Fixed = !!this.option.Fixed;
        this.Over = !!this.option.Over;
        this.Center = !!this.option.Center;
        this.onShow = this.option.onShow;
        this.Box.style.zIndex = this.OverLay.zIndex + 1;
        this.Box.style.display = "none";
        //兼容ie6用的属性
        if (j.Browser.isIE6) {
            this._top = this._left = 0; this._select = [];
            this._fixed = j.bind(this, function() { this.Center ? this.SetCenter() : this.SetFixed(); });
        }
    },
    show: function(options) {
        j.extend(this.option, options || {});
        this.Fixed = !!this.option.Fixed;
        this.Over = !!this.option.Over;
        this.Center = !!this.option.Center;

        this.Box.style.position = this.Fixed && !j.Browser.isIE6 ? "fixed" : "absolute"; //固定定位
        this.Over && this.OverLay.show(); //覆盖层
        this.Box.style.display = "block";
        //居中
        if (this.Center) {
            this.Box.style.top = this.Box.style.left = "50%";
            //设置margin
            if (this.Fixed) {
                this.Box.style.marginTop = -this.Box.offsetHeight / 2 + "px";
                this.Box.style.marginLeft = -this.Box.offsetWidth / 2 + "px";
            } else {
                this.SetCenter();
            }
        }
        if (j.Browser.isIE6) {//兼容ie6
            if (!this.Over) {
                //没有覆盖层ie6需要把不在Box上的select隐藏
                this._select.length = 0;
                j.each(document.getElementsByTagName("select"), j.bind(this, function(o) {
                    if (!Contains(this.Box, o)) { o.style.visibility = "hidden"; this._select.push(o); }
                }))
            }
            //设置显示位置
            this.Center ? this.SetCenter() : this.Fixed && this.SetFixed();
            //设置定位
            this.Fixed && window.attachEvent("onscroll", this._fixed);
        }
        this.onShow();
    },
    hide: function() {
        this.Box.style.display = "none";
        this.OverLay.hide();
        if (j.Browser.isIE6) {
            window.detachEvent("onscroll", this._fixed);
            j.each(this._select, function(o) { o.style.visibility = "visible"; });
        }

    },
    //兼容ie6的固定定位程序
    SetFixed: function() {
        this.Box.style.top = document.documentElement.scrollTop - this._top + this.Box.offsetTop + "px";
        this.Box.style.left = document.documentElement.scrollLeft - this._left + this.Box.offsetLeft + "px";
        this._top = document.documentElement.scrollTop; this._left = document.documentElement.scrollLeft;
    },
    //兼容ie6的居中定位程序
    SetCenter: function() {
        this.Box.style.marginTop = document.documentElement.scrollTop - this.Box.offsetHeight / 2 + "px";
        this.Box.style.marginLeft = document.documentElement.scrollLeft - this.Box.offsetWidth / 2 + "px";
    }
});

